Jak ukoncit jiny proces v Kylixu

Otázka od: Daniel VALS

4. 12. 2002 11:50

Potreboval bych vedet jak mam programove ukoncit v linuxu jiny proces. Podle
meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to ale
potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc vraci
pouze PID vlastni aplikace. Nevite nekdo jak na to?

Daniel VALS, programator

Odpovedá: Dalibor Toman

4. 12. 2002 15:50



> Potreboval bych vedet jak mam programove ukoncit v linuxu jiny
proces. Podle
> meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to
ale
> potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc
vraci
> pouze PID vlastni aplikace. Nevite nekdo jak na to?
>

juknout na zdrojaky utilitky 'ps' pripadne 'top'. Podle vseho
neexistuje zadne pekne API jako ve Windows (psapi nebo jak se jmenuje
ta knihovna). Ostatne ani na Windows neni ve vsech verzich pritomna
jiz v instalaci.

FYI: probiralo se to nedavno v linux konferenci - snad Ti to pomuze:
http://www.linux.cz/cgi-bin/search.cgi?pattern=Seznam+bezicich&Hledat=
Hledat&list=linux&sensitive=yes&matches=20&word=yes&fuzziness=0

D. Toman

Odpovedá: Daniel VALS

5. 12. 2002 11:42

Dne st 4. prosinec 2002 14:58 jste napsal(a):
> > Potreboval bych vedet jak mam programove ukoncit v linuxu jiny
>
> proces. Podle
>
> > meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to
>
> ale
>
> > potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc
>
> vraci
>
> > pouze PID vlastni aplikace. Nevite nekdo jak na to?
>
> juknout na zdrojaky utilitky 'ps' pripadne 'top'. Podle vseho
> neexistuje zadne pekne API jako ve Windows (psapi nebo jak se jmenuje
> ta knihovna). Ostatne ani na Windows neni ve vsech verzich pritomna
> jiz v instalaci.
>
> FYI: probiralo se to nedavno v linux konferenci - snad Ti to pomuze:
> http://www.linux.cz/cgi-bin/search.cgi?pattern=Seznam+bezicich&Hledat=
> Hledat&list=linux&sensitive=yes&matches=20&word=yes&fuzziness=0
>
> D. Toman

Diky za ten odkaz. Z prispevku na konferenci sem napsal nasledujici fci,
ktera prochazi adresar /proc/ . Do paramertru fce se zadava nazev souboru
kterym byl proces spusten (nejlepe i s celou cestou).

function ZjistiPID(EXESoubor: string): integer;
var
  sr: TSearchRec;
  TXTSoubor: Text;
  Radek: string;
begin
  Result:= 0;
  if FindFirst('/proc/*', faDirectory, sr) = 0 then
  begin
    repeat
      if (sr.Attr and faDirectory) = faDirectory then
      begin
        if FileExists('/proc/'+ sr.Name+'/cmdline') then
        begin
          AssignFile(TXTSoubor, '/proc/'+ sr.Name+'/cmdline');
          FileMode:= 0;
          Reset(TXTSoubor);
          Read(TXTSoubor, Radek);
          if Pos(UpperCase(EXESoubor), UpperCase(Radek))>0 then Result:=
StrToInt(sr.Name);
          CloseFile(TXTSoubor);
          //Break;
        end;
      end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;

Daniel VALS